MySQL on Windows(二进制分发包)

1 环境准备

2 部署方法

3 二进制分发包部署

(1) 解压到指定目录

(2) 创建配置文件

1) 位置

如安装根目录和启动盘根目录,详见Section 4.2.2.2, “Using Option Files”

也可在–defaults-extra-file指定

若没有指定,创建并使用默认配置

2) 命名

启动盘根目录可命名为my.ini或my.cnf

其他默认位置只能为my.ini

参数指定可为任意名称

3) 配置

默认参数详见Section 5.1.2, “Server Configuration Defaults”

通常只需配置安装目录和数据目录

1
2
3
4
5
6
7
# Windows系统使用双反斜杠
# mysqld用于所有的MySQL服务
[mysqld]
# set basedir to your installation path
basedir=E:\\mysql
# set datadir to the location of your data directory
datadir=E:\\mydata\\data

(3) 选择服务器类型

image-20200722152728771

Windows下MySQL 8.0支持符号链接

默认使用TCP/IP协议连接,因为更快。可以使用named_pipe

(4) 初始化数据目录

1) 初始化

使用二进制分发包或源码部署,需要初始化数据目录

需要为MySQL用户和用户组分配数据目录权限:

1
2
3
4
5
chown mysql:mysql mysql-files
chmod 750 mysql-files

数位分别代表用户、用户组和其他
数字分别代表读4、写2、执行1

通常,初始化仅在首次使用时执行。当对于已有的表,并不影响

初始化细节详见Data Directory Initialization ProcedureServer Actions During Data Directory Initialization

自动安全连接:bin/mysql_ssl_rsa_setup

详见Section 4.4.3, “mysql_ssl_rsa_setup — Create SSL/RSA Files”

自启动设置详见Section 2.10.5, “Starting and Stopping MySQL Automatically”

时区启用详见 Section 5.1.14, “MySQL Server Time Zone Support”

1’ 初始化过程

密码选项:

消息(包含初始密码)输出到标准错误输出中。Window平台使用–console输出到控制台

Unix和类Unix平台,使用–user额外指定数据目录拥有者

2’ 初始化时服务器动作

注意:

MySQL 8.0默认认证插件改为caching_sha2_password。

数据目录初始化序列没有替代mysql_secure_installationmysql_ssl_rsa_setup

(5) 设置环境变量

设置MySQL_HOME和包含bin目录的PATH变量,方便使用和切换不同MYSQL实例

(6) 首次使用

1
2
3
4
5
6
# 启动
mysqld --console
# 连接
mysql -u root -p
# 关闭
mysqladmin -u root -p shutdown

默认使用TCP/IP连接,可以配置使用命名管道或共享内存(--protocol=MEMORY

登录时,-u 指定用户,-p需要输入密码

修改初始密码详见Post-Initialization root Password Assignment

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

日志默认输出到数据目录的异常日志中

(7) MySQL服务

1
2
3
4
# 作为自启动服务
mysql --install
# 作为手动启动服务
mysql --install-manual

可以在选项后添加服务名称,服务名称后可以添加以下选项:

  • --defaults-file 自定义配置文件
  • –local-service 以受限的本地用户运行服务

配置读取:

  • 没有另选服务名(默认服务名为MySQL):同时读取mysqld和服务名组
  • 另选服务名:只读取服务名组

启动MySQL服务用户需要具有%TEMP%%TMP% (%TMPDIR%--tmpdir,如果有)的写权限。默认用户是LocalSystem并且%TEMP%%TMP%C:\Windows\Temp

手动启动服务:

1
2
3
4
5
6
7
8
9
10
11
12
# 以下命令不区分大小写
# 启动服务
sc start mysqld_service_name
# 或
NET START mysqld_service_name

# 停止服务
sc stop mysqld_service_name command
# 或
NET STOP mysqld_service_name command
# 或
mysqladmin shutdown

移除服务:

1
2
3
4
# 先停止服务再移除
SC DELETE mysqld_service_name
# 或
mysqld --remove

(8) 测试

可使用以下命令之一测试:

1
2
3
4
mysqlshow
mysqlshow -u root mysql
mysqladmin version status proc
mysql test

在TCP/IP模式下使用mysqld连接过慢,可能是DNS问题。可以配置skip_name_resolve选项并使用localhost或grant table中的HOST列的ip地址连接。注意:用户需要具有相应IP地址授权。

使用命名管道,可以通过 --pipe--protocol=PIPE,或者使用--socket 同时重命名管道

(9) 故障排除

首先,查看日志。详见Section 5.4.2, “The Error Log”

存储位置参考my.ini文件,默认为C:\Program Files\MySQL\MySQL Server 8.0\data或C:\ProgramData\Mysql。

(10) Windows平台限制

1) 进程内存

32位系统可用内存上限为4GB,其中内核和用户各一半。因此单一进程最大2GB。

大于2GB场景,需要使用64位系统。

2) 文件系统别名

通常用于移动数据到更快的存储介质。

Windows下,MyISAM引擎不可用。

3) 端口数量

Windows提供大约4000个端口用于客户端连接。

端口在断开连接后需要2-4分钟时间恢复可用。

大量的MySQL连接可能导致端口用尽。

详见http://support.microsoft.com/default.aspx?scid=kb;en-us;196271

4) DATA DIRECTORY 和INDEX DIRECTORY

CREATE TABLE 在Windows平台仅支持InnoDB引擎。

Windows平台上不支持DATA DIRECTORY 和INDEX DIRECTORY

5) DROP DATABASE

不能删除正在使用的表

6) 大小写不敏感

Windows平台上文件名、数据库和表名大小写不敏感。

唯一的约束是数据库和表名称在同一statement中具有相同的大小写模式。

7) 目录和文件名称

在Windows中,目录和文件名称需要与当前ANSI code pages匹配。

代码页也叫字符集。

如日文与西方时区不匹配。

8) 路径分隔符

Windows中使用反斜杠\作为路径分隔符,使用时需要转义\\。也可以使用单个斜杠/

在MySQL中,反斜杠是逃逸字符。

9) ^z字符

在Windows中,^z被认为是文件的终止,导致程序退出。

可以将数据保存到.sql文件中,使用–execute读取

示例如下:

1
2
3
4
5
6
7
# binary_log_file文件中包含^z字符
# 该命令可能异常退出
C:\> mysqlbinlog binary_log_file | mysql --user=root

# 解决方案
C:\> mysqlbinlog binary_log_file --result-file=/tmp/bin.sql
C:\> mysql --user=root --execute "source /tmp/bin.sql"

注意事项

(1) 大表支持

4GB以上的表需要安装在NTFS或更新的文件系统上

(2) 杀毒软件

建议添加数据目录和临时目录到白名单中

参考资料

Chapter 2 Installing and Upgrading MySQL

Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)